Çok biçimlilik (İngilizce: Polymorphism), nesne yönelimli programlamanın (OOP) temel kavramlarından biridir. Kelime anlamı olarak "çok şekillilik" veya "çok formluluk" anlamına gelir ve bir nesnenin farklı durumlarda farklı şekillerde davranabilme yeteneğini ifade eder. Temelde, aynı arayüzün farklı veri türleri üzerinde çalışabilmesini veya aynı işlemin farklı sınıflar tarafından farklı şekillerde uygulanabilmesini sağlar. Bu, kodun daha esnek, yeniden kullanılabilir ve genişletilebilir olmasını sağlar.
Çok biçimlilik, OOP'nin diğer temel ilkeleri olan Kapsülleme, Miras ve Soyutlama ile yakından ilişkilidir.
Çok biçimlilik, genellikle iki ana kategoriye ayrılır:
Derleme Zamanı Çok Biçimliliği (Compile-time Polymorphism) / Statik Çok Biçimlilik:
topla(int a, int b)
ve topla(double a, double b)
gibi metotlar aynı sınıfta bulunabilir. Metot Aşırı Yükleme.+
operatörü iki nesneyi toplamak için kullanılabilir. C++ ve C# dillerinde desteklenir.Çalışma Zamanı Çok Biçimliliği (Runtime Polymorphism) / Dinamik Çok Biçimlilik:
// Üst sınıf (Superclass)
class Hayvan {
public void sesCikar() {
System.out.println("Hayvan sesi");
}
}
// Alt sınıflar (Subclasses)
class Kedi extends Hayvan {
@Override
public void sesCikar() {
System.out.println("Miyav!");
}
}
class Köpek extends Hayvan {
@Override
public void sesCikar() {
System.out.println("Hav!");
}
}
public class Main {
public static void main(String[] args) {
Hayvan hayvan1 = new Hayvan();
Hayvan hayvan2 = new Kedi(); // Çok biçimlilik
Hayvan hayvan3 = new Köpek(); // Çok biçimlilik
hayvan1.sesCikar(); // "Hayvan sesi" yazdırır
hayvan2.sesCikar(); // "Miyav!" yazdırır
hayvan3.sesCikar(); // "Hav!" yazdırır
}
}
Bu örnekte, Hayvan
sınıfı bir üst sınıftır ve Kedi
ve Köpek
sınıfları Hayvan
sınıfından türetilmiştir. Her alt sınıf, sesCikar()
metodunu kendi türüne özgü bir şekilde yeniden tanımlar (override). Main
sınıfında, Hayvan
türünde referanslar kullanılarak Kedi
ve Köpek
nesneleri oluşturulur. Çalışma zamanında, hangi sesCikar()
metodunun çağrılacağına nesnenin gerçek türüne göre karar verilir. Bu, çok biçimliliğin bir örneğidir.
Çok biçimlilik, birçok farklı alanda kullanılır:
draw()
metodu) farklı şekillerde uygulayabilir.update()
metodu) farklı şekillerde uygulayabilir.Çok biçimlilik, modern yazılım geliştirme için vazgeçilmez bir kavramdır. Kodun daha esnek, yeniden kullanılabilir ve genişletilebilir olmasını sağlayarak daha karmaşık ve ölçeklenebilir sistemlerin geliştirilmesine olanak tanır. Nesne yönelimli programlama dillerini öğrenen her yazılımcının çok biçimliliğin temel prensiplerini ve kullanım alanlarını iyi anlaması önemlidir.